package com.malou.client.reportes;

import java.util.HashMap;
import java.util.List;

import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.StoreEvent;
import com.extjs.gxt.ui.client.store.StoreListener;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.Status;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.RootPanel;
import com.malou.client.MalouConstants;
import com.malou.client.util.Utilities;
import com.malou.client.ventas.modeloprenda.ModeloPrendas;
import com.malou.client.ventas.tienda.Tiendas;

public class ReporteInventarioPanel extends ContentPanel {	
	//Button print;
	Button excel;
	Button mail;
	Button find;
	Status status;
	Status status_xls;	
	ContentPanel hidePanel;
	EnviarCorreoDialog sendCorreo;
	private MalouConstants constants = GWT.create(MalouConstants.class);
	private ComboBox<BeanModel> tienda;
	private ComboBox<BeanModel> modeloprenda;
	private ComboBox<BeanModel> tipoprenda;
	private ComboBox<BeanModel> variacion;
	private Label tiendaL;
	private Label modeloprendaL;
	private Label tipoprendaL;
	private Label variacionL;
	
	
	@Override  
	protected void onRender(Element parent, int index) {  
		super.onRender(parent, index);
		tienda.setRawValue(Utilities.tienda);
	}
	public ReporteInventarioPanel(){
		setLayout(new FitLayout());
		setFrame(false);		
		setIcon(IconHelper.createPath("images/icons/table.png"));  
        setHeading(constants.reporteinventario());     
        
        final ReporteInventarioPanel rpi = this;
        
        Tiendas.getComboTienda();
        tienda = new ComboBox<BeanModel>();       
	    tienda.setEditable(false);	    
	    tienda.setDisplayField("nombre");	    	    
	    tienda.setWidth(150);  
	    tienda.setStore(Tiendas.storeCombo);  
	    tienda.setTypeAhead(true);  
	    tienda.setTriggerAction(TriggerAction.ALL);
	    tienda.setValueField("nombre");
	    tienda.setUseQueryCache(false);
	    tienda.setAllowBlank(true);
	    
	  /*  tienda.addSelectionChangedListener(new SelectionChangedListener<BeanModel>() {
			
			@Override
			public void selectionChanged(SelectionChangedEvent<BeanModel> se) {				
				loadReport();
			}
		});*/
	    
        ToolBar toolBar = new ToolBar();
        
        tiendaL = new Label(constants.graficosTienda());
	    toolBar.add(tiendaL);
	    toolBar.add(tienda);
	    
	    ModeloPrendas.getComboModeloPrendas();
	    ModeloPrendas.loaderModeloPrenda.load();
	    
	    modeloprenda = new ComboBox<BeanModel>();
	    modeloprenda.setDisplayField("nombre");
	    modeloprenda.setEmptyText("Seleccione...");
	    modeloprenda.setWidth(150);
	    modeloprenda.setStore(ModeloPrendas.storeModeloPrenda);
	    modeloprenda.setTypeAhead(true);
	    modeloprenda.setTriggerAction(TriggerAction.ALL);
	    modeloprenda.setValueField("nombre");
	    modeloprenda.setUseQueryCache(false);
	    modeloprenda.setAllowBlank(true);
	    modeloprenda.setMinChars(0);
	    
	    modeloprenda.getStore().addStoreListener(new StoreListener<BeanModel>(){
	    	 public void storeDataChanged(StoreEvent<BeanModel> se){
	    		modeloprenda.getStore().filter("nombre", modeloprenda.getRawValue()); 
	       }
		});
	    
	    ModeloPrendas.getComboVariaciones();
		ModeloPrendas.loaderVariacion.load();

		variacion = new ComboBox<BeanModel>();
		variacion.setFieldLabel(constants.VariacionNombre());
		variacion.setDisplayField("descripcion");
		variacion.setEmptyText("Seleccione...");
		variacion.setStore(ModeloPrendas.storeVariacion);
		variacion.setTypeAhead(true);
		variacion.setTriggerAction(TriggerAction.ALL);
		variacion.setValueField("descripcion");
		variacion.setAllowBlank(false);
		variacion.setUseQueryCache(false);
		variacion.setMinChars(0);
		variacion.addListener(Events.Expand, new Listener<BaseEvent>() {
			@Override
			public void handleEvent(BaseEvent be) {
				variacion.clearSelections();
			}

		});

		variacion.getStore().addStoreListener(new StoreListener<BeanModel>() {
			public void storeDataChanged(StoreEvent<BeanModel> se) {
				variacion.getStore().filter("descripcion", variacion.getRawValue());
			}
		});

	    
	    ModeloPrendas.getComboTipoPrendas();
	    ModeloPrendas.loaderTipoPrenda.load();
	    
	    tipoprenda = new ComboBox<BeanModel>();
	    tipoprenda.setDisplayField("nombre");
	    tipoprenda.setWidth(150);
	    tipoprenda.setEmptyText("Seleccione...");
	    tipoprenda.setStore(ModeloPrendas.storeTipoPrenda);
	    tipoprenda.setTypeAhead(true);  
	    tipoprenda.setTriggerAction(TriggerAction.ALL);
	    tipoprenda.setValueField("nombre");
	    
	    tipoprenda.setUseQueryCache(false);
	    tipoprenda.setAllowBlank(true);
	    tipoprenda.setMinChars(0);
	    tipoprenda.setValue(tipoprenda.getStore().getAt(0));
	    tipoprenda.setMinChars(0);
	    //cp.add(tipo, new FormData("-20"));
	    
	    tipoprenda.getStore().addStoreListener(new StoreListener<BeanModel>(){
	    	public void storeDataChanged(StoreEvent<BeanModel> se){		    		
	    		tipoprenda.getStore().filter("nombre", tipoprenda.getRawValue());
	    	}
	    });
	    
	    tipoprendaL = new Label(constants.TipoPrenda());
	    toolBar.add(tipoprendaL);
	    toolBar.add(tipoprenda);
	   
	    modeloprendaL = new Label(constants.stockModeloPrenda());
        toolBar.add(modeloprendaL);
	    toolBar.add(variacion);
	  
	    variacionL = new Label(constants.VariacionNombre());
	    toolBar.add(variacionL);
	    toolBar.add(modeloprenda);
		    
	    
        status = new Status();
	    status.setBusy(constants.cargando());
	    status.hide();    
	    status.setAutoWidth(true);
	    status.setStyleAttribute("paddingLeft", "20px");
	    toolBar.add(status);     
	    
	    
        find = new Button(constants.find(), IconHelper.createPath("images/icons/find.png"));
        find.setStyleAttribute("paddingLeft", "20px");
        
        SelectionListener<ButtonEvent> sl_find;        
        sl_find = new SelectionListener<ButtonEvent>(){
        	
        	@Override
			public void componentSelected(ButtonEvent ce) {		
					status.show();
					find.hide();
					rpi.removeAll();
					HashMap<String, Object> param = new HashMap<String, Object>();
					String cad = validarCampos();
					PdfReportViewer reportViewer=null;
																			
					if(modeloprenda.getValue()!=null)
						param.put("modeloprenda_nombre", modeloprenda.getValue().get("nombre"));
					
					if(tipoprenda.getValue()!=null)
						param.put("tipoprenda_id", tipoprenda.getValue().get("id"));
					
					if(variacion.getValue()!=null)
						param.put("variacion_id", variacion.getValue().get("id"));
									
					
					
					if(tienda.getValue()!= null){
						param.put("tienda_id", tienda.getValue().get("id"));
						param.put("tienda", tienda.getValue().get("nombre"));
					}
					
					if(cad.equals("mtv")){
						reportViewer = new PdfReportViewer("reports/reporte_inventario_mtv", param, status,find, null, null);
					}
					if(cad.equals("mt")){
						reportViewer = new PdfReportViewer("reports/reporte_inventario_mt", param, status,find, null, null);
					}	
					if(cad.equals("mv")){
						reportViewer = new PdfReportViewer("reports/reporte_inventario_mv", param, status,find, null, null);
					}
					if(cad.equals("tv")){
						reportViewer = new PdfReportViewer("reports/reporte_inventario_tv", param, status,find, null, null);
					}
					if(cad.equals("m")){
						reportViewer = new PdfReportViewer("reports/reporte_inventario_m", param, status,find, null, null);
					}
					if(cad.equals("t")){
						reportViewer = new PdfReportViewer("reports/reporte_inventario_t", param, status,find, null, null);
					}	
					if(cad.equals("v")){
			    		reportViewer = new PdfReportViewer("reports/reporte_inventario_v", param, status,find, null, null);
					}	
					
					rpi.add(reportViewer);
					rpi.layout();
			 }
        };
        find.addSelectionListener(sl_find);
        
        toolBar.add(find);
        
      /*  print = new Button(constants.imprimir(), IconHelper.createPath("images/icons/print.png"));
        print.setStyleAttribute("paddingLeft", "20px");
        print.setEnabled(false);
                
        toolBar.add(print);*/
        
        status_xls = new Status();
        status_xls.setBusy(constants.cargando());
        status_xls.hide();    
        status_xls.setAutoWidth(true);
        status_xls.setStyleAttribute("paddingLeft", "20px");
        toolBar.add(status_xls);
        
        excel = new Button(constants.exportToXls(), IconHelper.createPath("images/icons/excel.png"));
        excel.setStyleAttribute("paddingLeft", "20px");        
        
        SelectionListener<ButtonEvent> sl_excel;        
        sl_excel = new SelectionListener<ButtonEvent>(){
        	
        	@Override
			public void componentSelected(ButtonEvent ce) {				
				status_xls.show();
				excel.hide();
				hidePanel.removeAll();
				
				HashMap<String, Object> param = new HashMap<String, Object>();
				if(modeloprenda.getValue()!=null)
					param.put("modeloprenda", modeloprenda.getValue());
				
				if(modeloprenda.getValue()!=null)
					param.put("tipoprenda", tipoprenda.getValue());
				
				if(tienda.getValue()!= null){
					param.put("tienda_id", tienda.getValue().get("id"));
					param.put("tienda", tienda.getValue().get("nombre"));
				}
												
				XlsReportDownload reportViewer = new XlsReportDownload("reports/reporte_inventario", param, status_xls, excel, null);
									
				hidePanel.add(reportViewer);
				hidePanel.layout();
			}
        };
        excel.addSelectionListener(sl_excel);
        
        toolBar.add(excel);
        
        mail = new Button(constants.enviarCorreo(), IconHelper.createPath("images/icons/mail.png"));
        mail.setStyleAttribute("paddingLeft", "20px");        
        
        SelectionListener<ButtonEvent> sl_mail;
        sendCorreo = new EnviarCorreoDialog();
        sl_mail = new SelectionListener<ButtonEvent>(){
        	
        	@Override
			public void componentSelected(ButtonEvent ce) {				
				sendCorreo.reset();
				sendCorreo.rptInventario = ReporteInventarioPanel.this;
				sendCorreo.show();
				
			}
        };
        mail.addSelectionListener(sl_mail);
        
        toolBar.add(mail);
        
        setTopComponent(toolBar);
        
        if(hidePanel!= null)
        hidePanel.removeFromParent();
        hidePanel= new ContentPanel();        
        hidePanel.setVisible(false);        
        RootPanel.get().add(hidePanel);        
       // loadReport();
	}	
	
	public void enviarEmail(EnviarCorreo send){
		send.setSubject(constants.reporteinventario());
		
		HashMap<String, Object> param = new HashMap<String, Object>();			
		
		Reportes.correoDialog = sendCorreo;
		
		if(modeloprenda.getValue()!=null)
			param.put("modeloprenda", modeloprenda.getValue());
		
		if(modeloprenda.getValue()!=null)
			param.put("tipoprenda", tipoprenda.getValue());
		
		if(tienda.getValue()!= null){
			param.put("tienda_id", tienda.getValue().get("id"));
			param.put("tienda", tienda.getValue().get("nombre"));
		}
		
		Reportes.enviarEmail("reports/reporte_inventario", param, send,null);
	}
	
/*	private void loadReport(){
		status.show();				
		HashMap<String, Object> param = new HashMap<String, Object>();
		
		if(tienda.getValue()!= null){
			param.put("tienda_id", tienda.getValue().get("id"));
			param.put("tienda", tienda.getValue().get("nombre"));
		}
		
		PdfReportViewer reportViewer = new PdfReportViewer("reports/reporte_inventario", param, status,null,print, null);		
		add(reportViewer);		
	}*/
	
	public void setPermisos(List<String> permisos){
		boolean todas = permisos.contains("lastiendas");
		boolean su = permisos.contains("sutienda");
		
		if(todas){
			tiendaL.setVisible(true);
			tienda.setEnabled(true);
		    tienda.setVisible(true);		    
		}else if(su){
			tiendaL.setVisible(false);
			tienda.setEnabled(false);
		    tienda.setVisible(false);
		}
	}
	
	/*private boolean validate() {
		boolean mp = false;
		boolean tp = false;
		
		if(modeloprenda.getValue()!=null)
           mp=true;
		if(tipoprenda.getValue()!=null)
		   tp=true;
		return mp&&tp;
	}*/
	
	private String validarCampos(){
		boolean m = false;
		boolean t = false;
		boolean v = false;
		String cadena="";
		
		if(modeloprenda.getValue()!=null)
		  m = true;
		if(tipoprenda.getValue()!=null)
		  t = true;
		if(variacion.getValue()!=null)
		  v = true;	
		
		if(m&&t&&v)
		   cadena ="mtv"; 
		 		
		if(m&&t&&!v)
		   cadena = "mt";
		
		if(m&&v&&!t)
		   cadena = "mv";
		
		if(t&&v&&!m)
		   cadena = "tv";
		
		if(m&&!t&&!v)
		   cadena = "m";
		
		if(t&&!m&&!v)
		   cadena = "t";
		
		if(v&&!m&&!t)
		   cadena = "v";
				
		return cadena;
	}
}
